let fs = require("fs").promises

/**
 * Generator 函数 和 yield 的执行暂停.
 */
// function* test() {
//   // yield 暂停后, 在yield 后面的表达式不会执行. 比如下面的打印语句不会执行
//   // 而是当 test() 执行返回的iterator函数 调用 next 之后, 才会执行 yield后面的表达式.
//   const a = yield console.log('yield 后面的表达式')
// }
//
// let ittest = test() // 上面的 console.log('yield 后面的表达式') 不执行
// let {value, done} = ittest.next() // 上面的 console.log('yield 后面的表达式') 才执行.并且返回的结果给到value
// console.log(value);
//

//============================================================


function* read() {
  const a = yield fs.readFile("a.txt", "utf8")
  const b = yield fs.readFile(a, "utf8")
  console.log(b);
}

function co(it) {
  return new Promise((resolve, reject) => {
    function next(data) {
      let {value, done} = it.next(data);// 执行一次外部的 iterator 迭代器
      // 浏览器内部 resolve 方法会判断. 如果是promise, 会直接将promise返回.
      if (done) {
        return resolve(value)
      }
      Promise.resolve(value).then((data) => {
        next(data)
      }, reject)
    }
    next();
  })
}


let it = read()
let {value, done} = it.next()
value.then((data) => {
  let {value, done} = it.next(data) // 将 data 放到 a 中
})
